import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

# 定义函数
def f(x):
    return x**3 - 3*x**2 + 2

# 生成x值（从-1到3，共400个点）
x = np.linspace(-1, 3, 400)
y = f(x)

# 绘制函数图像
plt.figure(figsize=(10, 6))
plt.plot(x, y, 'b-', linewidth=2, label='f(x) = x³ - 3x² + 2')
plt.grid(True, alpha=0.3)
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('寻找函数的极值点')

# 标记极值点
extrema_x = [0, 2]  # 通过计算我们知道极值点大约在x=0和x=2处
extrema_y = [f(xi) for xi in extrema_x]
plt.scatter(extrema_x, extrema_y, color='red', s=100, zorder=5)
plt.annotate('局部最大值', (0, f(0)), xytext=(-50, 30), textcoords='offset points',
             arrowprops=dict(arrowstyle='->', color='red'))
plt.annotate('局部最小值', (2, f(2)), xytext=(50, 0), textcoords='offset points',
             arrowprops=dict(arrowstyle='->', color='red'))

plt.legend()
plt.show()